export default {
  namespaced: true, // 模块命名空间

  // 模块内容 (module assets)
  state: () => ({
    count: 2
  }),
  // 对于模块内部的 mutation 和 getter，接收的第一个参数是模块的局部状态对象
  mutations: {
    increment (state) {
      console.log('moduleA')
      // 这里的 `state` 对象是模块的局部状态
      state.count++
    }
  },
  getters: {
    doubleCount (state) {
      return state.count * 2
    },
    // 对于模块内部的 getter，根节点状态会作为第三个参数暴露出来
    // rootGetters 根节点 getters 作为第四个参数暴露处理
    sumWithRootCount (state, getters, rootState, rootGetters) {
      return state.count + rootState.count + rootGetters.doneState
    }
  },
  // 对于模块内部的 action，局部状态通过 `context.state` 暴露出来，根节点状态则为 `context.rootState`
  actions: {
    incrementIfOddOnRootSum ({ state, commit, rootState }) {
      if ((state.count + rootState.count) % 2 === 1) {
        // 在命名空间模块内，想要访问 其他全局 的 mutation 或 action 的时候，设置 `{ root: true }` 
        commit('increment', { amount: 10 }, { root: true })
        // 需要传入参数，否则报错
        commit('test', {}, { root: true })
      }
    },
    // 在带命名空间的模块注册全局 action
    globalAction: {
      root: true,
      handler (namespacedContext) {
        console.log(namespacedContext)
      }
    }
  },

  // 嵌套模块
  modules: {
    // 继承父模块的命名空间
    myPage: {
      state: () => ({
        page: 10
      }),
      getters: {
        profile (state) {
          return `${state.page} 页`
        }
      }
    }
  }
}